home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 26 / Cream of the Crop 26.iso / os2 / octa209s.zip / octave-2.09 / libcruft / ranlib / genf.f < prev    next >
Text File  |  1996-07-19  |  2KB  |  63 lines

  1.       REAL FUNCTION genf(dfn,dfd)
  2. C**********************************************************************
  3. C
  4. C     REAL FUNCTION GENF( DFN, DFD )
  5. C                GENerate random deviate from the F distribution
  6. C
  7. C
  8. C                              Function
  9. C
  10. C
  11. C     Generates a random deviate from the F (variance ratio)
  12. C     distribution with DFN degrees of freedom in the numerator
  13. C     and DFD degrees of freedom in the denominator.
  14. C
  15. C
  16. C                              Arguments
  17. C
  18. C
  19. C     DFN --> Numerator degrees of freedom
  20. C             (Must be positive)
  21. C                              REAL DFN
  22. C      DFD --> Denominator degrees of freedom
  23. C             (Must be positive)
  24. C                              REAL DFD
  25. C
  26. C
  27. C                              Method
  28. C
  29. C
  30. C     Directly generates ratio of chisquare variates
  31. C
  32. C**********************************************************************
  33. C     .. Scalar Arguments ..
  34.       REAL dfd,dfn
  35. C     ..
  36. C     .. Local Scalars ..
  37.       REAL xden,xnum
  38. C     ..
  39. C     .. External Functions ..
  40.       REAL genchi
  41.       EXTERNAL genchi
  42. C     ..
  43. C     .. Executable Statements ..
  44.       IF (.NOT. (dfn.LE.0.0.OR.dfd.LE.0.0)) GO TO 10
  45.       WRITE (*,*) 'Degrees of freedom nonpositive in GENF - abort!'
  46.       WRITE (*,*) 'DFN value: ',dfn,'DFD value: ',dfd
  47.       CALL XSTOPX ('Degrees of freedom nonpositive in GENF - abort!')
  48.  
  49.    10 xnum = genchi(dfn)/dfn
  50. C      GENF = ( GENCHI( DFN ) / DFN ) / ( GENCHI( DFD ) / DFD )
  51.       xden = genchi(dfd)/dfd
  52.       IF (.NOT. (xden.LE. (1.2E-38*xnum))) GO TO 20
  53.       WRITE (*,*) ' GENF - generated numbers would cause overflow'
  54.       WRITE (*,*) ' Numerator ',xnum,' Denominator ',xden
  55.       WRITE (*,*) ' GENF returning 1.0E38'
  56.       genf = 1.0E38
  57.       GO TO 30
  58.  
  59.    20 genf = xnum/xden
  60.    30 RETURN
  61.  
  62.       END
  63.